This invention relates to bar code scanning.
A bar code symbol is a coded pattern of indicia comprising a series of bars and spaces, called elements, which are typically rectangular and have a variety of possible widths. A specific arrangement of elements defines a character represented according to a set of rules and definitions specified by a symbology. To encode a desired sequence of characters, groups of elements are concatenated to form the complete bar code symbol, with each character being represented by a corresponding group of elements. In some symbologies, start and stop characters are used to indicate where the bar code begins and ends. A number of different bar code symbologies exist, such as UPC/EAN, Code 39, Code 128, Codabar, and Interleaved 2 of 5.
The number of characters per inch represented by the bar code symbol is referred to as the density of the symbol. High density symbols, which have line widths of about 5 mils or less, may be used for small parts such as integrated circuits, or in symbols with high information density. Low density symbols, which have line widths greater than about 50 mil, may be used, for example, for coding packages and containers in warehouses.
In typical scanning systems, a light source, such as a laser or laser diode, produces a beam which is directed by a lens or similar optical components along a light path toward a target that includes a bar code symbol on its surface. The beam produces a spot on the target. In order to scan in a laser system, the spot is mechanically or manually moved to produce a line or series of lines across the symbol. A sensor, such as a photodetector, is positioned in the scanner. A portion of the light which is reflected off the symbol is detected by the sensor which provides an analog signal. The analog signal is converted to a pulse width modulated digital signal, in which the pulse widths correspond to the physical widths of the elements in the time domain, i.e. how long the elements were scanned.
The decoder receives the digital signal and attempts to decode the scan. If start and stop characters and the data characters between them can be decoded successfully, the decoding process is finished. Otherwise, the decoder receives a next scan and attempts to decode it. The process continues until a scan is completely decoded or until no more scans are available. The signal is decoded according to a specific symbology into a binary representation of the data encoded in the symbol.
Scanning systems are available for a variety of applications. A laser scanner may be mounted in a fixed position so that products with a bar code are moved past the scanner mechanically or manually, as in a warehouse or a supermarket. Laser scanners typically have an oscillating motor or other means for causing a laser beam spot to trace a scan line across the bar code. In some other scanner systems, the scanner is hand-held and portable. Some scanners resemble a gun, others are wands which are manually passed over the bar code.
In either fixed or portable systems, the spot speed of the scan line varies as the line is traced across a target. With a hand-held wand, the spot speed varies due to manual motion. Typically, the spot accelerates quickly then slows down. Ideally, a user would start the movement of the wand well in advance of encountering the bar code, but it is not possible to train all users in this procedure and to rely on compliance. For a scanner with an oscillating motor, the motor causes the spot speed to increase and then decrease, thus causing a profile which is generally sinusoidal. Still another cause of spot-speed variation is the orientation of the bar code. If the code is applied to a curved object, the speed of the spot crossing it can vary depending on the degree of curvature.
If a scanning system determines time domain widths of elements, i.e., how long it takes the spot to cross the elements, elements that are spatially equal will produce inconsistent time domain widths if the speed varies. Variation in spot speed may be sufficient to cause a decode failure, which is an inability to decode, or a misdecode, which is an incorrect determination. The error introduced by spot-speed variation combined with other errors, such as printing defects or ambient light, may also cause failure or misdecode, even if the error from spot speed is tolerable.
This variation in spot speed has long been appreciated. The bar codes, themselves, have typically been designed to accommodate the variation in speed. Information is encoded as relative variations in width of the bars and spaces making up the code. During decoding, the relative widths of the elements within a character are used to decode the character. Thus, while speed variation from character to character is not a significant difficulty, speed variation within a character is a problem. Such variation can, if severe, produce an inaccurate decode. E.g., a speed change of 25% from the start to the finish of a character will make bars at the end of the character appear 25% narrower than bars at the start, enough of a difference to affect the decoding.
It has been known that such variation is a source of error in decoding, but a practical solution to the problem has not been available. A difficulty perceived by the art in attempting to solve the problem is that printing errors, and other decoding errors, produce variation in element widths, and there has not heretofore been a practical way of correcting error due to speed changes.
Bar code verifiers (such as the Symbol Technologies LaserCheck II verifier), which are used to measure the quality of printed bar codes, have been designed to subtract out the effect of scan speed variation to give a better measurement of printing quality. Such verifiers compensate for spot-speed variation by fixing the bar code scanner on a stand to hold its location fixed, and placing a calibration bar code in the path of the scan. The calibration bar code has a series of elements with identical width, from which the verifier determines speed variation across the bar code. A bar code to be verified is then placed in the same exact location as the calibration bar code, and the stored speed variation is used to adjust the raw scan data produced.